// import { login, logout, getInfo } from "@/api/user";
import { login } from "@/api/user";
import { getToken, setToken, removeToken } from "@/utils/auth";
import { resetRouter } from "@/router";

const getDefaultState = () => {
  return {
    token: getToken(),
    name: "",
    avatar: "",
    class_id: 0,
    mode: 0,
    pid: 0,
    role: 0
  };
};

const state = getDefaultState();

const mutations = {
  RESET_STATE: state => {
    Object.assign(state, getDefaultState());
  },
  SET_TOKEN: (state, token) => {
    state.token = token;
  },
  SET_NAME: (state, name) => {
    state.name = name;
  },
  SET_AVATAR: (state, avatar) => {
    state.avatar = avatar;
  },
  SET_OTHER: (state, { name, value }) => {
    state[name] = value;
  }
};

const actions = {
  // user login
  login({ commit }, userInfo) {
    const { username, password } = userInfo;
    return new Promise((resolve, reject) => {
      login({ username: username.trim(), password: password })
        .then(response => {
          if (response.state) {
            const { data } = response;
            const { class_id, mode, pid, role } = data;
            localStorage.setItem("user", JSON.stringify(data))
            commit("SET_OTHER", {
              name: "class_id",
              value: class_id
            })
            commit("SET_OTHER", {
              name: "mode",
              value: mode
            })
            commit("SET_OTHER", {
              name: "pid",
              value: pid
            })
            commit("SET_OTHER", {
              name: "role",
              value: role
            })
            commit("SET_TOKEN", data.token);
            setToken(data.token);
            resolve();
          } else {
            reject(response);
          }
        })
        .catch(error => {
          reject(error);
        });
    });
  },

  // get user info
  getInfo({ commit, state }) {
    return new Promise((resolve, reject) => {
      commit("SET_NAME", "user");
      commit("SET_AVATAR", "--");
      const oUser = JSON.parse(localStorage.getItem("user"))
      for (let i in oUser) {
        if (i !== "token") {
          commit("SET_OTHER", {
            name: i,
            value: oUser[i]
          });
        }
      }
      resolve("");
      reject("");
      state;
      // getInfo(state.token)
      //   .then(response => {
      //     const { data } = response;
      //
      //     if (!data) {
      //       return reject("Verification failed, please Login again.");
      //     }
      //
      //     const { name, avatar } = data;
      //
      //     commit("SET_NAME", name);
      //     commit("SET_AVATAR", avatar);
      //     resolve(data);
      //   })
      //   .catch(error => {
      //     reject(error);
      //   });
    });
  },

  // user logout
  logout({ commit, state }) {
    return new Promise((resolve, reject) => {
      // logout(state.token)
      //   .then(() => {
      console.log(state)
      removeToken(); // must remove  token  first
      resetRouter();
      commit("RESET_STATE");
      resolve();
      // })
      // .catch(error => {
      reject();
      // });
    });
  },

  // remove token
  resetToken({ commit }) {
    return new Promise(resolve => {
      removeToken(); // must remove  token  first
      commit("RESET_STATE");
      resolve();
    });
  }
};

export default {
  namespaced: true,
  state,
  mutations,
  actions
};
